from rest_framework import serializers
from .models import User

class UserSerializer(serializers.Serializer):
    ## 在模型里面我们是没有定义 id 字段的，model 会自动增加 id 字段
    ## 如果你想在查询数据时需要返回 id 字段，就需要在序列化这里加上 id 字段
    ## 加上 read_only 则在新建数据时，表单可以不提交 id 字段数据，就算你提交了 id 字段数据，它也会忽略
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(required=True, max_length=32, min_length=2)
    address = serializers.CharField(max_length=256, allow_blank=True)
    phone = serializers.CharField(required=True, max_length=15, min_length=11)
    email = serializers.EmailField(required=True, max_length=32, min_length=3)

    def create(self, validated_data):
        createObj = User.objects.create(**validated_data)
        return createObj

    '''
        1、put 和 patch 时，api 接口必须要加上 pk ，不然不知道你需要更新或修改哪条数据
            例如：http://localhost/apis/user/1/，表示更新 id 为 1 的这条数据
        2、put 是修改数据，所有字段都必须传
           patch 是更新数据，可以更新任意字段，表单没传的字段就保持原来的值
    '''
    def update(self, instance, validated_data):
        instance.name = validated_data.get('name', instance.name)
        instance.address = validated_data.get('address', instance.address)
        instance.phone = validated_data.get('phone', instance.phone)
        instance.email = validated_data.get('email', instance.email)
        instance.save()
        return instance


